package br.com.translog.dao;

import br.com.translog.interfacee.IDAOProduto;
import br.com.translog.modelo.Produto;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;

public class DAOProduto implements IDAOProduto {
    
    private static EntityManagerFactory emf = Persistence.createEntityManagerFactory("TranslogPU");

    private static EntityManager getEntityManager() {
        
        return emf.createEntityManager();
    }

    @Override
    public void cadastraProduto(Produto p) {
        
        //Chamando o metodo que retornara o Factory junte com a criacao do EntityManager...
        EntityManager em = getEntityManager();
                
        try {
            //Abrindo uma conexao para realizacao da transacao...
            em.getTransaction().begin();
            //Persistindo o objeto...
            em.persist(p);
            //Comitando a transacao...
            em.getTransaction().commit();
                 
        } catch (Exception e) {
            //Desfazendo as alteracoes...
            em.getTransaction().rollback();
        } finally {
            //Fechando o EntityManager para liberar conexoes...
            em.close();
        }
    }

    @Override
    public void alteraProduto(Produto p) {
        
        //Chamando o metodo que retornara o Factory junte com a criacao do EntityManager...
        EntityManager em = getEntityManager();
        
        try {
            //Abrindo uma conexao para realizacao da transacao...
            em.getTransaction().begin();
            //Atualizando o objeto...
            em.merge(p);
            //Comitando a transacao...
            em.getTransaction().commit();
            
        } catch (Exception e) {
            //Desfazendo as alteracoes...
            em.getTransaction().rollback();
        } finally {
            //Fechando o EntityManager para liberar conexoes...
            em.close();
        }
    }

    @Override
    public void excluiProduto(int codigo) {
        
        //Chamando o metodo que retornara o Factory junte com a criacao do EntityManager...
        EntityManager em = getEntityManager();
        Produto p;
        
        try {
            //Abrindo uma conexao para realizacao da transacao...
            em.getTransaction().begin();
            //Pesquisando o funcionario...
            p = em.find(Produto.class, codigo);
            //Removendo o objeto...
            em.remove(p);
            //Comitando a transacao...
            em.getTransaction().commit();
            
        } catch (Exception e) {
            //Desfazendo as alteracoes...
            em.getTransaction().rollback();
        } finally {
            //Fechando o EntityManager para liberar conexoes...
            em.close();
        }
    }

    @Override
    public Produto consultaProduto(int codigo) {
        
        //Chamando o metodo que retornara o Factory junte com a criacao do EntityManager...
        EntityManager em = getEntityManager();
        Produto p;
        
        try {
            //Realizando a consulta...
            p = em.find(Produto.class, codigo);
            
        } catch (Exception e) {
            return null;
        } finally {
            //Fechando o EntityManager para liberar conexoes...
            em.close();
        }
        
        return p;
    }
}
